package com.jacob.androidframe.base;


import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;

/**
 * 所有Dialog的父类。
 * 
 * 建议使用Activity来管理Dialog，这样就可以在Dialog中调用getOwnerActivity()来得到Activity对象。
 * 若Dialog没有和Activity绑定，则会返回null。
 * 
 * 若Dialog不需要用户输入文本，想要将Dialog显示在当前的输入法的上面的话。
 * 调用下面方法：getWindow().setFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM,WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
 * 
 */
public abstract class DialogBase extends android.app.Dialog {
	private LayoutInflater mInflater;
	private Bundle mBundle;

	/**
	 * 创建Dialog窗口。
	 * 
	 * @param context 上下文对象
	 * @param theme 样式文件ID，若传入0，则默认使用android.R.style.Theme_Dialog样式。
	 */
	public DialogBase(Context pContext, int pTheme, Bundle pBundle) {
		super(pContext, pTheme);
		mInflater = getLayoutInflater();
		mBundle = pBundle;
	}

	@Override
	protected void onCreate(Bundle pSavedInstanceState) {
		super.onCreate(pSavedInstanceState);
		System.out.println("DialogonCreate");
	}

	@Override
	protected void onStart() {
		super.onStart();
		System.out.println("DialogonStart");
	}

	@Override
	protected void onStop() {
		super.onStop();
		System.out.println("DialogonStop");
	}
	
	/**
	 * 短时间显示Toast消息
	 * 
	 * @param pMsg 消息内容
	 */
	protected void showToastShort(String pMsg) {
		Toast.makeText(getContext(), pMsg, Toast.LENGTH_SHORT).show();
	}
	
	/**
	 * 短时间显示Toast消息
	 * 
	 * @param pStringResId String资源ID
	 */
	protected void showToastShort(int pStringResId) {
		Toast.makeText(getContext(), getContext().getString(pStringResId), Toast.LENGTH_SHORT).show();
	}

	protected Bundle getBundle() {
		return mBundle;
	}

	/**
	 * 加载Layout文件，生成View组件。
	 * 
	 * @param pLayoutId Layout文件的资源Id
	 * @param pRoot 生成的View所属的ViewGroup，传入null表示没有父ViewGroup。
	 * @return 若传入了pRoot，则返回pRoot；反之，则返回生成的View
	 */
	protected View inflate(int pLayoutId, ViewGroup pRoot) {
		return mInflater.inflate(pLayoutId, pRoot);
	}
	
	
	/**
	 * 初始化成员变量。
	 * 本方法应该在子类的onCreate方法中，绑定Layout文件后被调用。
	 * 
	 */
	protected abstract void initVariables();

	/**
	 * 初始化成员View。
	 * 本方法应该在子类的onCreate方法中，绑定Layout文件后被调用。
	 */
	protected abstract void initViews();

	/**
	 * 初始化监听器。
	 * 本方法应该在子类的onCreate方法中，绑定Layout文件后被调用。
	 */
	protected abstract void initListeners();

	/**
	 * 绑定View组件和Adapter。
	 * 本方法应该在子类的onCreate方法中，绑定Layout文件后被调用。
	 */
	protected abstract void bindData();

}
